﻿//==================================================================
// Copyright (C) 2011 深圳市中旭企业管理股份有限公司
// 文件名: V_CrmCustomerHistory.cs
// 作 者：代码自动生成
// 日 期：2012-5-19 14:13:05
// 描 述：
// 版 本：1.00
// 修改历史纪录
// 版 本  修改时间      修改人            修改内容
// 1.00             
//==================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.Text;
using Csla;
using lite;
using Csla.Validation;
using Csla.Data;
using System.Data.SqlClient;
using ZX.DAL;
using OpenExpressApp.ORM;

namespace ZX.CRM.Library
{
	/// <summary>
    /// 
    /// </summary>
	[Serializable]
    [Table(Name="V_CrmCustomerHistory")]
    [ZX.DBModule.Table("V_CrmCustomerHistory","ID")]
	public class V_CrmCustomerHistory: ZX.DBModule.BaseEntity
	{
        #region Business Methods 业务方法
        /// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > IDProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("ID"));
        [DataObjectField(true, true)]
        [Column, PK]
        public Guid ID
        {
            get { return GetProperty(IDProperty); }
            set { SetProperty(IDProperty, value); }
        }
        
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > CodeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Code"));
        [Column]
        public string Code
        {
            get { return GetProperty(CodeProperty); }
            set { SetProperty(CodeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > StateProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("State"));
        [Column]
        public string State
        {
            get { return GetProperty(StateProperty); }
            set { SetProperty(StateProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > ProvinceProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Province"));
        [Column]
        public string Province
        {
            get { return GetProperty(ProvinceProperty); }
            set { SetProperty(ProvinceProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > CityProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("City"));
        [Column]
        public string City
        {
            get { return GetProperty(CityProperty); }
            set { SetProperty(CityProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > AreaProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Area"));
        [Column]
        public string Area
        {
            get { return GetProperty(AreaProperty); }
            set { SetProperty(AreaProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > AddressProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Address"));
        [Column]
        public string Address
        {
            get { return GetProperty(AddressProperty); }
            set { SetProperty(AddressProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > CustomerNameProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("CustomerName"));
        [Column]
        public string CustomerName
        {
            get { return GetProperty(CustomerNameProperty); }
            set { SetProperty(CustomerNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > LevelIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("LevelId"));
        [Column]
        public Guid LevelId
        {
            get { return GetProperty(LevelIdProperty); }
            set { SetProperty(LevelIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > AreaIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("AreaId"));
        [Column]
        public Guid AreaId
        {
            get { return GetProperty(AreaIdProperty); }
            set { SetProperty(AreaIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > TradeIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("TradeId"));
        [Column]
        public Guid TradeId
        {
            get { return GetProperty(TradeIdProperty); }
            set { SetProperty(TradeIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > ProductIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("ProductId"));
        [Column]
        public Guid ProductId
        {
            get { return GetProperty(ProductIdProperty); }
            set { SetProperty(ProductIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > PersonIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("PersonId"));
        [Column]
        public Guid PersonId
        {
            get { return GetProperty(PersonIdProperty); }
            set { SetProperty(PersonIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > PropertyIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("PropertyId"));
        [Column]
        public Guid PropertyId
        {
            get { return GetProperty(PropertyIdProperty); }
            set { SetProperty(PropertyIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > DecisionmakerProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Decisionmaker"));
        [Column]
        public string Decisionmaker
        {
            get { return GetProperty(DecisionmakerProperty); }
            set { SetProperty(DecisionmakerProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > DecisionPositionProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("DecisionPosition"));
        [Column]
        public string DecisionPosition
        {
            get { return GetProperty(DecisionPositionProperty); }
            set { SetProperty(DecisionPositionProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > DecisionTelProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("DecisionTel"));
        [Column]
        public string DecisionTel
        {
            get { return GetProperty(DecisionTelProperty); }
            set { SetProperty(DecisionTelProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > DecisionEmailProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("DecisionEmail"));
        [Column]
        public string DecisionEmail
        {
            get { return GetProperty(DecisionEmailProperty); }
            set { SetProperty(DecisionEmailProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > DecisionSexProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("DecisionSex"));
        [Column]
        public string DecisionSex
        {
            get { return GetProperty(DecisionSexProperty); }
            set { SetProperty(DecisionSexProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > Tel1Property = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Tel1"));
        [Column]
        public string Tel1
        {
            get { return GetProperty(Tel1Property); }
            set { SetProperty(Tel1Property, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > Tel2Property = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Tel2"));
        [Column]
        public string Tel2
        {
            get { return GetProperty(Tel2Property); }
            set { SetProperty(Tel2Property, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > EmailProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("Email"));
        [Column]
        public string Email
        {
            get { return GetProperty(EmailProperty); }
            set { SetProperty(EmailProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > CompanyNettingProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("CompanyNetting"));
        [Column]
        public string CompanyNetting
        {
            get { return GetProperty(CompanyNettingProperty); }
            set { SetProperty(CompanyNettingProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > CompanyProductProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("CompanyProduct"));
        [Column]
        public string CompanyProduct
        {
            get { return GetProperty(CompanyProductProperty); }
            set { SetProperty(CompanyProductProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > SaleadviserIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("SaleadviserId"));
        [Column]
        public Guid SaleadviserId
        {
            get { return GetProperty(SaleadviserIdProperty); }
            set { SetProperty(SaleadviserIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > SaleaddTimeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< DateTime >("SaleaddTime"));
        [Column]
        public DateTime SaleaddTime
        {
            get { return GetProperty(SaleaddTimeProperty); }
            set { SetProperty(SaleaddTimeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > AddUserProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("AddUser"));
        [Column]
        public Guid AddUser
        {
            get { return GetProperty(AddUserProperty); }
            set { SetProperty(AddUserProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > AddTimeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< DateTime >("AddTime"));
        [Column]
        public DateTime AddTime
        {
            get { return GetProperty(AddTimeProperty); }
            set { SetProperty(AddTimeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > LectorUserProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("LectorUser"));
        [Column]
        public Guid LectorUser
        {
            get { return GetProperty(LectorUserProperty); }
            set { SetProperty(LectorUserProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > LectortimeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< DateTime >("Lectortime"));
        [Column]
        public DateTime Lectortime
        {
            get { return GetProperty(LectortimeProperty); }
            set { SetProperty(LectortimeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > CustomeerMgrProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("CustomeerMgr"));
        [Column]
        public Guid CustomeerMgr
        {
            get { return GetProperty(CustomeerMgrProperty); }
            set { SetProperty(CustomeerMgrProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > MgrtimeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< DateTime >("Mgrtime"));
        [Column]
        public DateTime Mgrtime
        {
            get { return GetProperty(MgrtimeProperty); }
            set { SetProperty(MgrtimeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > IsHistoryProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("IsHistory"));
        [Column]
        public string IsHistory
        {
            get { return GetProperty(IsHistoryProperty); }
            set { SetProperty(IsHistoryProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > OrderCodeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("OrderCode"));
        [Column]
        public string OrderCode
        {
            get { return GetProperty(OrderCodeProperty); }
            set { SetProperty(OrderCodeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > DeptIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("DeptId"));
        [Column]
        public Guid DeptId
        {
            get { return GetProperty(DeptIdProperty); }
            set { SetProperty(DeptIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > DateProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< DateTime >("Date"));
        [Column]
        public DateTime Date
        {
            get { return GetProperty(DateProperty); }
            set { SetProperty(DateProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > TypeIDProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("TypeID"));
        [Column]
        public Guid TypeID
        {
            get { return GetProperty(TypeIDProperty); }
            set { SetProperty(TypeIDProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > CourseLoyoutIDProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("CourseLoyoutID"));
        [Column]
        public Guid CourseLoyoutID
        {
            get { return GetProperty(CourseLoyoutIDProperty); }
            set { SetProperty(CourseLoyoutIDProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > TotalMoneyProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< decimal >("TotalMoney"));
        [Column]
        public decimal TotalMoney
        {
            get { return GetProperty(TotalMoneyProperty); }
            set { SetProperty(TotalMoneyProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > ThodometerIdProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("ThodometerId"));
        [Column]
        public Guid ThodometerId
        {
            get { return GetProperty(ThodometerIdProperty); }
            set { SetProperty(ThodometerIdProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< DateTime > HmDateProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< DateTime >("HmDate"));
        [Column]
        public DateTime HmDate
        {
            get { return GetProperty(HmDateProperty); }
            set { SetProperty(HmDateProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > HmTypeProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("HmType"));
        [Column]
        public string HmType
        {
            get { return GetProperty(HmTypeProperty); }
            set { SetProperty(HmTypeProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > TeachIDProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("TeachID"));
        [Column]
        public Guid TeachID
        {
            get { return GetProperty(TeachIDProperty); }
            set { SetProperty(TeachIDProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > ProductsIDProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("ProductsID"));
        [Column]
        public Guid ProductsID
        {
            get { return GetProperty(ProductsIDProperty); }
            set { SetProperty(ProductsIDProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< Guid > OrderIDProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< Guid >("OrderID"));
        [Column]
        public Guid OrderID
        {
            get { return GetProperty(OrderIDProperty); }
            set { SetProperty(OrderIDProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > RebateProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< decimal >("Rebate"));
        [Column]
        public decimal Rebate
        {
            get { return GetProperty(RebateProperty); }
            set { SetProperty(RebateProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< int > AmountProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< int >("Amount"));
        [Column]
        public int Amount
        {
            get { return GetProperty(AmountProperty); }
            set { SetProperty(AmountProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > RebateMoneyProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< decimal >("RebateMoney"));
        [Column]
        public decimal RebateMoney
        {
            get { return GetProperty(RebateMoneyProperty); }
            set { SetProperty(RebateMoneyProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > AccountReceivableProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< decimal >("AccountReceivable"));
        [Column]
        public decimal AccountReceivable
        {
            get { return GetProperty(AccountReceivableProperty); }
            set { SetProperty(AccountReceivableProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< decimal > ResignMoneyProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< decimal >("ResignMoney"));
        [Column]
        public decimal ResignMoney
        {
            get { return GetProperty(ResignMoneyProperty); }
            set { SetProperty(ResignMoneyProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > AddUserNameProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("AddUserName"));
        [Column]
        public string AddUserName
        {
            get { return GetProperty(AddUserNameProperty); }
            set { SetProperty(AddUserNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > SaleadviserNameProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("SaleadviserName"));
        [Column]
        public string SaleadviserName
        {
            get { return GetProperty(SaleadviserNameProperty); }
            set { SetProperty(SaleadviserNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > TeacherNameProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("TeacherName"));
        [Column]
        public string TeacherName
        {
            get { return GetProperty(TeacherNameProperty); }
            set { SetProperty(TeacherNameProperty, value); }
        }
		/// <summary>
        /// 
        /// </summary>
        private static PropertyInfo< string > DeptNameProperty = RegisterProperty(typeof(V_CrmCustomerHistory),new PropertyInfo< string >("DeptName"));
        [Column]
        public string DeptName
        {
            get { return GetProperty(DeptNameProperty); }
            set { SetProperty(DeptNameProperty, value); }
        }
        #endregion
        
        #region Validation Rules 验证规则
        //将验证规则与业务对象的属性联系在一起
        protected override void AddBusinessRules()
        {
            //AddRule的第一个参数是委托变量，也就是说是方法的变量
            ValidationRules.AddRule(CommonRules.StringRequired, "Code");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Code", 15));
            ValidationRules.AddRule(CommonRules.StringRequired, "State");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("State", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "Province");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Province", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "City");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("City", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "Area");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Area", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "Address");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Address", 100));
            ValidationRules.AddRule(CommonRules.StringRequired, "CustomerName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("CustomerName", 50));
            ValidationRules.AddRule(CommonRules.StringRequired, "Decisionmaker");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Decisionmaker", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "DecisionPosition");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("DecisionPosition", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "DecisionTel");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("DecisionTel", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "DecisionEmail");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("DecisionEmail", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "DecisionSex");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("DecisionSex", 1));
            ValidationRules.AddRule(CommonRules.StringRequired, "Tel1");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Tel1", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "Tel2");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Tel2", 20));
            ValidationRules.AddRule(CommonRules.StringRequired, "Email");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("Email", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "CompanyNetting");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("CompanyNetting", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "CompanyProduct");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("CompanyProduct", 100));
            ValidationRules.AddRule(CommonRules.StringRequired, "IsHistory");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("IsHistory", 1));
            ValidationRules.AddRule(CommonRules.StringRequired, "OrderCode");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("OrderCode", 15));
            ValidationRules.AddRule(CommonRules.StringRequired, "HmType");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("HmType", 1));
            ValidationRules.AddRule(CommonRules.StringRequired, "AddUserName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("AddUserName", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "SaleadviserName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("SaleadviserName", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "TeacherName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("TeacherName", 30));
            ValidationRules.AddRule(CommonRules.StringRequired, "DeptName");
            ValidationRules.AddRule(CommonRules.StringMaxLength, new Csla.Validation.CommonRules.MaxLengthRuleArgs("DeptName", 50));
            //base.AddBusinessRules();
        }
        #endregion
        
        #region Factory Methods 工厂方法

        public V_CrmCustomerHistory(){}

        public static V_CrmCustomerHistory New()
        {
            return DataPortal.Create< V_CrmCustomerHistory>();
        }
        public static V_CrmCustomerHistory Get(Guid ID)
        {
            return DataPortal.Fetch< V_CrmCustomerHistory>(new SingleLazyCriteria< V_CrmCustomerHistory, Guid>(ID, false));
        }
        public static void Delete(Guid ID )
        {
            DataPortal.Delete(ID);
        }
        
        #endregion
        
        #region Data Access 数据访问
        //由于DataPortal_create中没有对数据库的访问，所有标记了Runlocal特性，使得该方法只需在本地运行即可
        //如果代码中有访问数据库的方法，那么就不要用这个特性，使数据门户可以根据情况将此方法的运行选择在应用服务器还是本地
        [RunLocal()]
        protected override void DataPortal_Create()
        {
            //在此调用CheckRules对所有的属性进行验证规则的检查，这样检查只运行一次。
            ValidationRules.CheckRules();
        }


        //可以看到此方法没有标记任何特性
        //此方法要访问数据库所以不能标记本地，由于她没有任何数据库更新操作所以也无需事务性的保护
        //此方法调用结束后会隐含的调用MarkOld（）方法
        private void DataPortal_Fetch(Guid ID)
        {
            //通过连接字符串建立SQL连接对象，Using符号代表，范围释放的意思，SqlConnection对象会在此范围后被释放掉
             using (var ctx = ConnectionManager<SqlConnection>.GetManager(ConnectionStringNames))
            {
                IDb db = DbFactory.Instance.GetDb(ctx.Connection);
                IQuery q = db.Query();
                q.Constrain("ID").Equal(ID);
                
                var data = db.Select< V_CrmCustomerHistory>(q)[0];
                LoadProperty(IDProperty, data.ID);
                LoadProperty(CodeProperty, data.Code);
                LoadProperty(StateProperty, data.State);
                LoadProperty(ProvinceProperty, data.Province);
                LoadProperty(CityProperty, data.City);
                LoadProperty(AreaProperty, data.Area);
                LoadProperty(AddressProperty, data.Address);
                LoadProperty(CustomerNameProperty, data.CustomerName);
                LoadProperty(LevelIdProperty, data.LevelId);
                LoadProperty(AreaIdProperty, data.AreaId);
                LoadProperty(TradeIdProperty, data.TradeId);
                LoadProperty(ProductIdProperty, data.ProductId);
                LoadProperty(PersonIdProperty, data.PersonId);
                LoadProperty(PropertyIdProperty, data.PropertyId);
                LoadProperty(DecisionmakerProperty, data.Decisionmaker);
                LoadProperty(DecisionPositionProperty, data.DecisionPosition);
                LoadProperty(DecisionTelProperty, data.DecisionTel);
                LoadProperty(DecisionEmailProperty, data.DecisionEmail);
                LoadProperty(DecisionSexProperty, data.DecisionSex);
                LoadProperty(Tel1Property, data.Tel1);
                LoadProperty(Tel2Property, data.Tel2);
                LoadProperty(EmailProperty, data.Email);
                LoadProperty(CompanyNettingProperty, data.CompanyNetting);
                LoadProperty(CompanyProductProperty, data.CompanyProduct);
                LoadProperty(SaleadviserIdProperty, data.SaleadviserId);
                LoadProperty(SaleaddTimeProperty, data.SaleaddTime);
                LoadProperty(AddUserProperty, data.AddUser);
                LoadProperty(AddTimeProperty, data.AddTime);
                LoadProperty(LectorUserProperty, data.LectorUser);
                LoadProperty(LectortimeProperty, data.Lectortime);
                LoadProperty(CustomeerMgrProperty, data.CustomeerMgr);
                LoadProperty(MgrtimeProperty, data.Mgrtime);
                LoadProperty(IsHistoryProperty, data.IsHistory);
                LoadProperty(OrderCodeProperty, data.OrderCode);
                LoadProperty(DeptIdProperty, data.DeptId);
                LoadProperty(DateProperty, data.Date);
                LoadProperty(TypeIDProperty, data.TypeID);
                LoadProperty(CourseLoyoutIDProperty, data.CourseLoyoutID);
                LoadProperty(TotalMoneyProperty, data.TotalMoney);
                LoadProperty(ThodometerIdProperty, data.ThodometerId);
                LoadProperty(HmDateProperty, data.HmDate);
                LoadProperty(HmTypeProperty, data.HmType);
                LoadProperty(TeachIDProperty, data.TeachID);
                LoadProperty(ProductsIDProperty, data.ProductsID);
                LoadProperty(OrderIDProperty, data.OrderID);
                LoadProperty(RebateProperty, data.Rebate);
                LoadProperty(AmountProperty, data.Amount);
                LoadProperty(RebateMoneyProperty, data.RebateMoney);
                LoadProperty(AccountReceivableProperty, data.AccountReceivable);
                LoadProperty(ResignMoneyProperty, data.ResignMoney);
                LoadProperty(AddUserNameProperty, data.AddUserName);
                LoadProperty(SaleadviserNameProperty, data.SaleadviserName);
                LoadProperty(TeacherNameProperty, data.TeacherName);
                LoadProperty(DeptNameProperty, data.DeptName);
            }
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_DeleteSelf()
        {
            //依然是调用下面的方法删除的，只是他此时可以获得自己的Id
            DataPortal_Delete(IDProperty);
        }
        #endregion
	}
}

